<?php

include_once '../models/Factura.php';
include_once '../models/Orden.php';
include_once '../models/Pago.php';
include_once '../models/ConceptoContable.php';
include_once '../models/Nota.php';
include_once '../models/Entrega.php';

class CtlFacturas {

    public function __construct($paramForm) {

        error_reporting(E_ERROR | E_WARNING | E_PARSE);

        switch ($paramForm['opcCtl']) {
            case 1: $this->registrarFactura($paramForm);
                break;

            case 2: $this->obtenerOrdenesParaFactura($paramForm['idCliente']);
                break;

            case 3: $this->obtenerDetallesDeFactura($paramForm[idFactura]);
                break;

            case 4: $this->realizarPago($paramForm[idFactura], $paramForm[fecha], $paramForm[monto]);
                break;
            
            case 5: $this->obtenerOrdenesParaNota($paramForm['idCliente']);
                break;
        }
    }

    public function realizarPago($idFactura, $fecha, $monto) {
        $pago = new Pago();
        $pago->registrar($idFactura, $fecha, $monto);

        $pagos = $pago->getMontoPagos($idFactura);
        $factura = new Factura();
        $descu = $factura->recupertarDescuentos($idFactura);
        $monto = $factura->recupertarMonto($idFactura);

        echo "<h1>Se ha registrado el pago</h1>";

        if (($monto - ($pagos + $descu)) <= 0) {
            $factura->liquidarFactura($idFactura);
            echo "<h1>Se ha liquidado por completo la factura</h1>";
        }
    }

    public function registrarFactura($paramForm) {
        
        if ($paramForm['idCliente'] != 0) {

            //Obtenemos los datos de la factura y creamos un objeto de tipo factura
            $nuevaFactura = new Factura($paramForm['idCliente'], $paramForm['numFactura'], 
                    $paramForm['fechaEmision'], ($paramForm['cancelada'] == 'no' ? 0 : 1 ));
            //Registramos la Factura
            $nuevaFactura->registrar($nuevaFactura);
            //Obtenemos el ID de la factura
            $idFactura = $nuevaFactura->obtenerIdFactura($paramForm['numFactura'], $paramForm['fechaEmision']);
            //echo "ID FACTURA: $idFactura<br>";

            $monto = 0;
            $strOrdenes = "";

            //Recorremos las ordenes de la factura
            for ($i = 1; $i <= $paramForm['totalConceptos']; $i++) {

                //Obtenemos los ID's de las ordenes que se relacionan con la factura
                $idOrden = "idOrden" . $i;

                //Verificamos que en esta posición se haya selecionado una ORDEN 
                //-1 = Selecione una orden-modelo
                if ($paramForm[$idOrden] != -1) {

                    //Insertamos el ConceptoContable
                    $nuevoConcepFac = new ConceptoContable($paramForm[$idOrden], $paramForm["unidades".$i], $paramForm["precio".$i], $paramForm["descr".$i]);
                    $nuevoConcepFac->setIdFactura($idFactura);
                    $nuevoConcepFac->registrarParaFactura($nuevoConcepFac);
                    
                    //Si el usuario marca el conceto como entrega y si la factura NO es cancelada, registramos la entrega, 
                    //el IDORDEN NO tiene que ser 0
                    if (($paramForm["entrega".$i] == 1) && ($paramForm[$idOrden] != 0) && ($paramForm["cancelada"] == 'no')) {
                        //Recuperamos el ID del CoceptoContable
                        $idConcepto = $nuevoConcepFac->getIdByIdFacIdOrdCantPrec($nuevoConcepFac);
                        
                        //Si el IDConcepto NO es cero, entonces continumos
                        if ($idConcepto != 0) {
                            
                            //Creamos la entrega
                            $nuevaEntrega = new Entrega($nuevoConcepFac->getIdOrden(), $idConcepto, $nuevoConcepFac->getCantidad(), $paramForm['fechaEmision'], 'E');

                            //Registramos le entrega
                            $nuevaEntrega->registrar($nuevaEntrega);
                            
                            //Ahora verificamos si a la orden ya se le entregarón todas las prendas
                            $orden = new Orden(null, null, null, null, null, null);
                            $cantPrendas = $orden->getCantPrendas($paramForm[$idOrden]);
                            
                            //Aquí cambiamos el estado si es las prendas ENTREGADAS ya superan las PRENDAS por Orden
                            if ($nuevaEntrega->getEntregadas($paramForm[$idOrden]) >= $cantPrendas) {
                                $orden->setEstado($paramForm[$idOrden], 'T');
                                
                                /***
                                 * POSTERIORMENTE PONER LAS ORDENES QUE YA SE TERMIANRON DE ENTREGAR CON ESTA FACTURA
                                 */
                            }
                        
                        }
                    }

                    //Añadimos al montoTotal de la factura la cantidad (precio * unidades) de ese CONCEPTO 
                    $monto += ($paramForm["unidades".$i] * $paramForm["precio".$i]);
                }
            }

            //Asignamos el monto a la factura
            $nuevaFactura->setMonto($idFactura, $monto);

            echo "<h1>Se ha registrado la factura</h1>";
        } else {
            echo "<h1>Seleccione un cliente</h1>";
        }
    }

    public function obtenerOrdenesParaFactura($idCliente) {
        $ordenes = new Orden(null, null, null, null, null, null);

        //Se retornara un SELECT con las ordenes que aun no se liquidan por completo 
        $strOrdenes = "<td colspan='2'><br><select name=\"idOrden1\" id='ordenes'><option value=\"-1\"> Selecciona una orden-modelo </option>
                                                                                    <option value=\"0\"> No Aplica </option>";
        //Se obtienen las ordenes del cliente cuyo ID fue recibido como parametro
        $arrOrdenes = $ordenes->obtenerOrdenesListaFactura($idCliente);

        while ($tempOrden = mysql_fetch_array($arrOrdenes)) {
            //Arma la cadena con el ID orden como VALUE, y muestra la CLAVE y el NUMORDEN.
            $strOrdenes .= "<option value='$tempOrden[idorden]'> $tempOrden[numorden]-$tempOrden[clave] </option>";
        }
        
        //Se cierra el SELECT
        $strOrdenes .= "</select>";
        
        //Se envian los campos para NumUnidad y PrecioUnidad
        $strOrdenes .= "Unidades: <input type='number' name='unidades1' id='unidades1' value='0'>
            Precio Unidad: <input type='number' name='precio1' id='precio1' value='0'>
        <input type='text' placeholder='Descripción (Opcional)' lang='30' name='descr1' id='descr1'>
        Es entrega: Si<input type='radio' name='entrega1' id='entrega1' value='1' checked='checked'> No<input type='radio' name='entrega1' id='entrega1' value='0'>
        <div id='orden2'></div></td>";

        echo $strOrdenes;
    }
    
    public function obtenerOrdenesParaNota($idCliente) {
        $ordenes = new Orden(null, null, null, null, null, null);

        //Se retornara un SELECT con las ordenes que aun no se liquidan por completo 
        $strOrdenes = "<td colspan='2'><br><select name=\"idOrden1\" id='ordenes'><option value=\"-1\"> Selecciona una orden-modelo </option>
                                                                                    <option value=\"0\"> No Aplica </option>";
        //Se obtienen las ordenes del cliente cuyo ID fue recibido como parametro
        $arrOrdenes = $ordenes->obtenerOrdenesListaFactura($idCliente);

        while ($tempOrden = mysql_fetch_array($arrOrdenes)) {
            //Arma la cadena con el ID orden como VALUE, y muestra la CLAVE y el NUMORDEN.
            $strOrdenes .= "<option value='$tempOrden[idorden]'> $tempOrden[numorden]-$tempOrden[clave] </option>";
        }
        
        //Se cierra el SELECT
        $strOrdenes .= "</select>";
        
        //Se envian los campos para NumUnidad y PrecioUnidad
        $strOrdenes .= "Precio Unidad: <input type='number' name='precio1' id='precio1' value='0'>
        Unidades: <input type='number' name='unidades1' id='unidades1' value='0'>
        <input type='text' placeholder='Descripción (Opcional)' lang='30' name='descr1' id='descr1'>
        Es faltante: Si<input type='radio' name='faltante1' id='faltante1' value='1' checked='checked'> No<input type='radio' name='faltante1' id='faltante1' value='0'>
        <div id='orden2'></div></td>";

        echo $strOrdenes;
    }

    function obtenerDetallesDeFactura($idFactura) {

        $factura = new Factura(0,0,0, 0);

        $factura = $factura->getFacturaByID($idFactura);

        echo "<h1>Detalles de Factura</h1>
<table class='tabla2'>
    <tr>
        <td >No. Factura: $factura[numfactura]</td>
        <td></td>
        <td></td>
        <td></td>
        <td>Fecha de Emisión: $factura[fechaemision]</td>
    </tr>
    
    <tr>
        <td colspan='5'><h4>Cliente: $factura[nombre]</h4></td>
    </tr>          
        <tr >
        <td bgcolor='#0033FF' colspan='5'>Conceptos de Factura</td>
    </tr>
    <tr>
        <td>Piezas</td>
        <td>Modelo/Orden</td>
        <td>Descripción</td>
        <td>Precio Unitario</td>
        <td>Importe</td>
    </tr>";

        $conceptoContable = new ConceptoContable(0, 0, 0, 0, 0);

        //echo "idMOdeloDeFactura $factura[idmodelodefactura]";

        $arrConceptos = $conceptoContable->obtenerConceptosDeFactura($factura['idfactura']);
        
        $orden = new Orden(null, null, null, null, null, null);

        while ($tempConcepto = mysql_fetch_array($arrConceptos)) {

            $montoConcepto = $tempConcepto[numUnidades] * $tempConcepto[precioUnidad];
            
            $numClave = $orden->getNumOrdenClaveModeloById($tempConcepto['idorden']);

            echo "<tr>
                        <td>$tempConcepto[numUnidades]</td>
                        <td>$numClave</td>
                        <td> $tempConcepto[descripcion]</td>
                        <td> $tempConcepto[precioUnidad]</td>
                        <td> $ " . $montoConcepto . "</td>
                    </tr>";
        }

        echo "<tr>
        <td></td>
        <td></td>
        <td></td>
        <td bgcolor='#FFFF00'>Total Conceptos:</td>
        <td bgcolor='#FFFF00'> $ $factura[monto] </td>
    </tr>  ";
    
    
echo "
    
<tr>
        <td><br></td>
        <td><br></td>
        <td><br></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td bgcolor='#FF0000'> Subtotal: </td>
        <td bgcolor='#FF0000'> $ " . ($factura[monto]) . "</td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td bgcolor='#FF0000'> IVA: </td>
        <td bgcolor='#FF0000'> $ " . (($factura[monto] * 1.16) - $factura[monto]) . "</td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td bgcolor='#FF0000'> Total: </td>
        <td bgcolor='#FF0000'> $ " . ($factura[monto] * 1.16) . "</td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td bgcolor='#FF0000'>Cantidad Pagada :</td>
        <td bgcolor='#FF0000'> $ " . ($factura[cantidadpagada]) . "</td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td bgcolor='#FF0000'>Adeudo :</td>
        <td bgcolor='#FF0000'> $ " . (($factura[monto] * 1.16) - ($factura[cantidadpagada])) . "</td>
    </tr>

     </table>";
    }

}

new CtlFacturas($_GET);

/**
 ************ QUITAMOS TEMPORALMENTE LA PARTE DE PAGOS ******************
 * <tr bgcolor='#0033FF'>
        <td colspan='3'>Pagos</td>
    </tr>
        <tr>
        <td>No.</td>
        <td>Fecha</td>
        <td>Cantidad</td>
    </tr>";

        $pago = new Pago();

        //echo "idMOdeloDeFactura $factura[idmodelodefactura]";

        $arrPagos = $pago->getPagosFacturaById($factura['idfactura']);

        $eAcum = 0;

        if (!$arrPagos) {
            echo "<tr>
                                <td colspan='3'>Aun no se han realizado pagos</td>
                            </tr>";
        } else {

            while ($tempPago = mysql_fetch_array($arrPagos)) {

                $eAcum = $eAcum + $tempPago['monto'];

                echo "<tr>
                                <td>" . ($i + 1) . "</td>
                                <td>$tempPago[fecha]</td>
                                <td> $ " . $tempPago['monto'] . "</td>
                            </tr>";
            }
        }

        echo "<tr>
        <td><br></td>
        <td><br></td>
        <td><br></td>
    </tr>
        <tr>
        <td></td>
        <td bgcolor='#FFFF00'>Total Pagos:</td>
        <td bgcolor='#FFFF00'> $ $eAcum </td>
    </tr> 
 * 
 * 
 * 
 * <tr>
        <td></td>
        <td bgcolor='#DBA901'>Descuentos :</td>
        <td bgcolor='#DBA901'> $ " . ($eAcum + $factura[montocargo] + $factura[montocredito]) . "</td>
    </tr>
 * 
 * 
 * ********************** DESCUENTOS POR NOTAS PARA FACTURAS
 * 
 * <tr>
        <td><br></td>
        <td><br></td>
        <td><br></td>
    </tr>
        
        <tr bgcolor='#0033FF'>
        <td colspan='5'>Descuentos</td>
    </tr>
        <tr>
        <td >Tipo Nota</td>
        <td >Numero</td>
        <td >Fecha</td>
        <td >Descripcion</td>
        <td >Monto Nota</td>
    </tr>";
        
        //Buscamos todas las notas pertenecientes a la factura
        $nota = new Nota(0, 0, 0, 0, 0, 0, 0);
        $notasCredito = $nota->obtenerNotasDeFactura($idFactura);
        
        //Creamos una variable para acumular el valor del monto de las notas
        $totalNotas = 0;
        
        while ($notaTemp = mysql_fetch_array($notasCredito)) {
            
            $totalNotas += $notaTemp[montoNota];
            
            echo "<tr>
                        <td>". ($notaTemp['tipo'] == 'C' ? 'Credito' : 'Cargo') ."</td>
                        <td> $notaTemp[numNota] </td>
                        <td> $notaTemp[fecha] </td>
                        <td> $notaTemp[descripcion]</td>
                        <td> $ " . $notaTemp[montoNota] . "</td>
                    </tr>";
            
        }
 * 
 * 
 * <tr>
        <td></td>
        <td></td>
        <td></td>
        <td bgcolor='#FF0000'> Descuentos: </td>
        <td bgcolor='#FF0000'> $ " . ($totalNotas) . "</td>
    </tr>
 * 
 * 
 */

//SELECT * FROM conceptocontable WHERE idconceptocontable=(SELECT @@identity AS id) AND idFactura=1 AND idOrden=1 AND numUnidades=1 AND precioUnidad=1
?>